﻿/******************************************************************
** 文件名:	find_csv_list.h
** 版  权:	(C)  dailyplay sz
** 创建人:	FlameHong
** 日  期:	2014/3/13 16:46
** 版  本:	1.0
** 描  述:	找到所有的csv文件
** 应  用:  服务器

**************************** 修改记录 ******************************
** 修改人:
** 日  期:
** 描  述:
********************************************************************/


#include <string>
#include <vector> 
#ifndef WIN32
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
#else
#include <wtypes.h>
#include<windows.h>   
#include <tchar.h>
#endif
#include "File.h"

using namespace std;

//遍历文件夹函数 
#ifndef WIN32
void TraverseFolder(const char* dir, const char* extend, vector<string>& csvlist)
{
	char *oldpath = get_current_dir_name();
	DIR* dp;
	struct dirent* entry;
	struct stat statbuf;
	if ((dp = opendir(dir)) == NULL) {
		fprintf(stderr, "cannot open directory: %s\n", dir);
		return;
	}
	chdir(dir);
	while ((entry = readdir(dp)) != NULL) {
		lstat(entry->d_name, &statbuf);
		if (!S_ISDIR(statbuf.st_mode))
		{
			if (strstr(entry->d_name, extend))
			{
				csvlist.push_back(entry->d_name);
			}
		}
	}
	closedir(dp);

	
	chdir(oldpath);
}

#else
void TraverseFolder(LPCTSTR lpPath, const char* extend, vector<string>& csvlist)
{
	TCHAR szFind[MAX_PATH] = { _T("\0") };
	WIN32_FIND_DATA findFileData;
	BOOL bRet;

	_tcscpy_s(szFind, MAX_PATH, lpPath);
	_tcscat_s(szFind, _T("\\*."));     //这里一定要指明通配符，不然不会读取所有文件和目录 
	_tcscat_s(szFind, _T(extend));

	HANDLE hFind = ::FindFirstFile(szFind, &findFileData);
	if (INVALID_HANDLE_VALUE == hFind)
	{
		return;
	}

	//遍历文件夹 
	while (TRUE)
	{
		if (findFileData.cFileName[0] != _T('.'))
		{//不是当前路径或者父目录的快捷方式 
			//_tprintf(_T("%s\\%s\n"), lpPath, findFileData.cFileName); 
			string csvname = findFileData.cFileName;
			//transform(csvname.begin(), csvname.end(), csvname.begin(), ::tolower);
			//13.    transform(strA.begin(), strA.end(), strA.begin(), ::toupper);   
			csvlist.push_back(csvname);
			if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{//这是一个普通目录 
				//设置下一个将要扫描的文件夹路径 
				_tcscpy_s(szFind, MAX_PATH, lpPath);
				_tcscat_s(szFind, _T("\\"));
				_tcscat_s(szFind, findFileData.cFileName);
				///_tcscat_s(szNextDir, _T("\\*")); 
				//遍历该目录 
				TraverseFolder(szFind, extend, csvlist);
			}
		}
		//如果是当前路径或者父目录的快捷方式，或者是普通目录，则寻找下一个目录或者文件 
		bRet = ::FindNextFile(hFind, &findFileData);
		if (!bRet)
		{//函数调用失败 
			//cout << "FindNextFile failed, error code: "  
			//  << GetLastError() << endl; 
			break;
		}
	}
	::FindClose(hFind);
}
#endif


